package com.atguigu.spzx.manager.utils;

import com.atguigu.spzx.model.entity.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

public class MenuHelper {
    /**
     * 递归实现封装过程
     * @param sysMenuList
     * @return
     */
    public static List<SysMenu> bulidTree(List<SysMenu> sysMenuList) {
        List<SysMenu> tree = new ArrayList<>(); // 创建集合 用于封装最终的数据
        // 遍历所有菜单集合
        for (SysMenu sysMenu : sysMenuList) {
            // 找到递归的入口，第一层的菜单
            // 条件 parent_id = 0
            if (sysMenu.getParentId().longValue() == 0) {
               // 根据第一层，找下层菜单，使用递归完成
              // 写方法实现下层过程;
              // 方法里面传递两个参数，第一个是当前第一层菜单，第二个参数是所有菜单的集合
                tree.add(findChildren(sysMenu, sysMenuList));
            }
        }
        return tree;
    }

    public static SysMenu findChildren(SysMenu sysMenu, List<SysMenu> sysMenuList) {
        sysMenu.setChildren(new ArrayList<>());
        for (SysMenu it : sysMenuList) {
            // 递归查找
            // sysMenu的id值和 sysMenulist中parentId相同
            if (sysMenu.getId().longValue() == it.getParentId().longValue()) {
                // it就是下层数据进行封装
                // 如果不调用findChildren 只有最多两层 要使用递归进行
                sysMenu.getChildren().add(findChildren(it, sysMenuList));
            }

        }
        return  sysMenu;
    }



}
